我正在尋找一種方法來洗掉文本檔案中每隔一行的第三列。樣本輸入:
4444 pm 7654 army 3687 anywhere 5650 infection
7332 thesis 0638 nasa 3976 condition 0738 los
3549 partners 7584 fee 3930 move 6535 friends
5693 matter 8801 visits 5350 grid 8917 honest
4039 facing 5453 cp 6101 bedrooms 5268 ford
期望的輸出:
4444 pm army 3687 anywhere 5650 infection
7332 thesis 0638 nasa 3976 condition 0738 los
3549 partners fee 3930 move 6535 friends
5693 matter 8801 visits 5350 grid 8917 honest
4039 facing cp 6101 bedrooms 5268 ford
我知道兩個命令。
awk '{print $3}' input.txt
sed '1~2d' input.txt
但我不確定如何將它們結合起來。
期待任何形式的幫助或建議。
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed 's/\S\ //3;n' file
洗掉第三列,列印結果并取下一行,重復。
uj5u.com熱心網友回復:
有了gnu awk你可以得到每隔一行,并用一個模式來拍攝第一2個字,匹配前導空格字符和第三個單詞,和之后拍攝其余2組。
然后您可以列印 2 個捕獲組的值。
awk 'NR%2==1 && match($0, /^(\S \s \S )\s \S (.*)/, a) {
print a[1], a[2]
next
}1' file
輸出
4444 pm army 3687 anywhere 5650 infection
7332 thesis 0638 nasa 3976 condition 0738 los
3549 partners fee 3930 move 6535 friends
5693 matter 8801 visits 5350 grid 8917 honest
4039 facing cp 6101 bedrooms 5268 ford
uj5u.com熱心網友回復:
假設您的檔案確實被稱為input.txt:
sed -r '1~2s/^(\w \W \w \W )\w \W (.*)/\1\2/' input.txt
4444 pm army 3687 anywhere 5650 infection
7332 thesis 0638 nasa 3976 condition 0738 los
3549 partners fee 3930 move 6535 friends
5693 matter 8801 visits 5350 grid 8917 honest
4039 facing cp 6101 bedrooms 5268 ford
地址運算子1~2(順便說一句,它是特定于 GNU sed 的)執行“模”操作,對每個編號不均勻的行進行操作。
替換操作s/// 記住前兩組詞/空白對,匹配第三組,并記住后面的所有內容;然后用除第三列之外的所有行替換原始行。
uj5u.com熱心網友回復:
怎么樣:
awk '{if (NR % 2 == 1){$3="";}print}' input.txt
NR=> 行號從 1 開始。
所以(NR % 2 == 1)每第二行從第一行開始。
$3="" => 洗掉第三個字。
print => 列印行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/337639.html
