Text-Processing

減少分隔文本文件中特定列的長度

  • October 11, 2018

我需要將分隔文本文件中的第 5 列減少到前 5 個字元。所有其他列必須保持未經編輯。

輸入:

file1.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    123456789

我希望輸出看起來像:

output.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    12345

注意:我碰巧使用逗號作為分隔符。

如果file.csv看起來像這樣:

123456789,123456789,123456789,123456789,123456789
123456789,123456789,123456789,123456789,223456789
123456789,123456789,123456789,123456789,323456789
123456789,123456789,123456789,123456789,423456789

然後,你可以這樣做:

$ awk -F, '{print $1","$2","$3","$4","substr($5,1,5) }' file.csv
123456789,123456789,123456789,123456789,12345
123456789,123456789,123456789,123456789,22345
123456789,123456789,123456789,123456789,32345
123456789,123456789,123456789,123456789,42345

如果所有值都很簡單(值中沒有引號和換行符)並且它們是逗號分隔的,例如:

123456789,123456789,123456789,123456789,123456789

如果一行總是有 5 個這樣的值,您可以使用sed

sed '2,$s/\(.*\),\(.*\),\(.*\),\(.*\),\(.....\)\(.*\)/\1,\2,\3,\4,\5/' input

假設您也有一個逗號分隔的2,$標題(並且它的第五列不應被截斷),如果不是這種情況,請忽略它。

引用自:https://unix.stackexchange.com/questions/167340