我有一個選項卡刪除文件,我想添加「$」每個變量的結束,我可以用awk,sed或其他方式嗎?如何用awk添加每個變量的字符結尾?
例 輸入:
a seq1 anot1
b seq2 anot2
c seq3 anot3
d seq4 anot4
我NEET有這樣:
輸出:
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$
任何答案將理解的,由於
我有一個選項卡刪除文件,我想添加「$」每個變量的結束,我可以用awk,sed或其他方式嗎?如何用awk添加每個變量的字符結尾?
例 輸入:
a seq1 anot1
b seq2 anot2
c seq3 anot3
d seq4 anot4
我NEET有這樣:
輸出:
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$
任何答案將理解的,由於
威特ħsed的:
sed 's/[^ ]*/&$/g' filename
它取代任何非空間單詞,後跟一個$字(&)。
糟糕!你說標籤。您可以用「\ t」替換上面的空格以使用製表符分隔。
sed 's/[^\t]*/&$/g' filename
事實上,甚至更好,製表符或空格:
sed 's/[^[:blank:]]*/&$/g' filename
請注意,'\ t'簡寫在GNU sed(即Linux的大多數版本)中起作用,但它不是通用的。在OS X,FreeBSD,Solaris等下無法使用。你可以使用bash的擴展引用來解決這個問題 - 也就是'$'...'' – ghoti
僅在bash下
while read line; do echo "${line//$'\t'/\$$'\t'}\$"; done < file
這hackish的解決方案依賴於兩個 「特殊」 的事情 - 參數展開進行替換,並格式化擴展以允許分析標籤。
在awk中,你可以更安全地處理領域:
awk -F'\t' 'BEGIN{OFS=FS} {for(n=1;n<=NF;n++){$n=$n "$"}} 1' file
這個工程通過投入的每一行加強與本身加上美元符號來代替每個領域。 BEGIN塊確保您的輸出將使用與您的輸入相同的字段分隔符。最後的1
對於「打印當前行」來說簡直就是awk。
AWK是你的朋友:
awk '{for(i=1;i<=NF;i++)sub(/$/,"$",$i);print}' file
或
awk '{for(i=1;i<=NF;i++)sub(/$/,"$",$i);}1' file
樣本輸出
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$
什麼是Happe的寧在這裏?
for-loop
我們遍歷記錄中的所有字段。sub
功能與$
即("$"
)取代end
即(/$/
)對於每個記錄($i
)。print
來打印記錄。數字1
也代表打印記錄的默認操作。遲到了......
另一個awk
解決方案。前綴字段和記錄分隔符以 「$」
$ awk -F'\t' 'BEGIN{OFS="$"FS; ORS="$"RS} {$1=$1}1' file
哦,非常好。微妙的+1! – ghoti
awk '{gsub(/ /,"$ ")}{print $0 "$\r"}' file
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$
會發生什麼? 首先用美元符號和新空格替換空格。 回車前最後插入美元符號。
雖然代碼經常爲自己說話,但只包含代碼且沒有文本解釋的答案會被標記爲複審隊列。您可以通過添加一個或兩個解釋來避免這種情況。 – Will
糟糕,您忘了發佈您的代碼! StackOverflow是關於幫助人們修復他們的代碼。這不是免費的編碼服務。任何代碼都比沒有代碼更好。即使你不知道如何編寫它,甚至元代碼也會演示你如何看待程序應該起作用。 – ghoti