假設我有一個vi文件如下所示:如何在Vi文件的每行末尾添加一些命令輸出?
貓file1的
abc 123 pqr
lmn 234 rst
jkl 100 mon
我想利用每一行的第二場(即,在這種情況下是123,234和100)和附加它到了同一行的末尾。 我該怎麼做?
輸出應該如下所示:
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
假設我有一個vi文件如下所示:如何在Vi文件的每行末尾添加一些命令輸出?
貓file1的
abc 123 pqr
lmn 234 rst
jkl 100 mon
我想利用每一行的第二場(即,在這種情況下是123,234和100)和附加它到了同一行的末尾。 我該怎麼做?
輸出應該如下所示:
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
隨着awk
:
$ awk '{NF=NF+1; $NF=$2}1' file
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100
它增加在一個場的數量,並且最後一個作爲第二。然後1
是一個真實的條件,它被評估爲默認的awk行爲:{print $0}
。
或者也
awk '{print $0, $2}' file
它打印全線加上第二場。
或者更短,thanks Håkon Hægland!:
awk '{$(NF+1)=$2}1' file
我試過這個:awk'{NF = NF + 1; $ NF = $ 3} 1'bteq_files> bteq_files。但文件被清空了。這是爲什麼?沒有重定向,我在提示符下得到了正確的輸出。 –
您無法從文件讀取並重定向到同一個文件。相反,使用一個臨時文件,然後將其移動到原始位置:'awk'{NF = NF + 1; $ NF = $ 2} 1'文件> temp_file && mv temp_file文件' – fedorqui
另外,在這個命令中,在結束大括號之後的'1'是做什麼的? –
你有很多方法可以做到,在六(M)。這是在我腦海中最簡單的:
說明:
:{range}norm command
在{range}
%
每行執行正常模式command
是一條捷徑範圍,意思是「緩衝區中的所有行「所以我們將執行緩衝區中每行的後續內容0
將光標置於當前行的第一列(不嚴格必要的,但好的做法)f<space>
跳到第一<space>
光標,光標在當前行yaw
後猛拉字光標$
跳轉到該行的末尾下<space>
p
粘貼先前抽出的文本你能否分解這個命令並解釋它在做什麼? –
@AjimBagwan,完成。 – romainl
@romanil:非常整齊!還有一個問題:如果我希望光標在當前光標位置後的第二個空格上跳轉,該怎麼辦?我用什麼來代替0f? –
awk還就行了。 –