我正在處理文本文件並添加由其他列的某些組件組成的列。要求刪除空格和撇號的新要求,我不確定完成此任務的最有效方法。使用awk打印沒有撇號或空格的新列
該文件的內容可以通過以下腳本創建:
content=(
john smith thomas blank 123 123456 10
jane smith elizabeth blank 456 456123 12
erin "o'brien" margaret blank 789 789123 9
juan "de la cruz" carlos blank 1011 378943 4
)
# put this into a tab-separated file, with the syntactic (double) quotes above removed
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "${content[@]}" >infile
這是我現在,但它不能刪除空格和撇號:
awk -F "\t" '{OFS="\t"; print $1,$2,$3,$5,$6,$7,$6 tolower(substr($2,0,3)); }' infile > outfile
這將引發錯誤「子第三個參數不是可變的對象「,這是有道理的,因爲我試圖處理輸出而不是輸入,我猜。
awk -F "\t" '{OFS="\t"; print $1,$2,$3,$5,$6,$7,$6 sub("'\''", "",tolower(substr($2,0,3))); }' infile > outfile
有沒有一種方法,我可以在較低的情況下打印列6和第2列的部分的組合,同時還能從輸出去掉空格和撇號到新列?最糟糕的情況是,我可以用我的第一個命令創建一個新文件,並用新的awk命令處理輸出,但是我希望一次完成就可以。
是否有一個理由,你想'awk'這個,而不是使用(說)bash內置功能? –
提供一個獨立的示例並不需要有人提供他們自己的'infile'來測試也是有幫助的。 –
我沒有awk作爲要求,但它似乎是一個合乎邏輯的解決方案,因爲我正在處理一個帶有製表符分隔內容的文件,我不希望將更改應用於所有列。如果你有另一個不使用awk的解決方案,我肯定會接受其他選擇。 –