[英]How to process file having fixed width columns in linux
我想處理下面的文件:
01234000000000000000000+000000000000000000+
02586000000000000000000+000000000000000000-
12345000000000000000000+000000000000000000-
12122000000000000000000+000000000000000000+
我想將上面的文件轉換為:
01234,000000000000000000+,000000000000000000+
02586,000000000000000000+,000000000000000000-
12345,000000000000000000+,000000000000000000-
12122,000000000000000000+,000000000000000000+
輸入文件分別具有固定寬度列5,19,19。
我想解決使用linux命令。
我嘗試下面的命令,但它不工作:(
awk 'BEGIN{FIELDWIDTHS="5 19 19";OFS=",";}{$1="$1,$2,$3"}' data.txt
在ubuntu 14.04 LTS桌面操作系統上執行上述命令,輸出結果為空(空白)。
雖然您忘了{print}
,但您的嘗試非常接近:
awk 'BEGIN{FIELDWIDTHS="5 19 19";OFS=","}{$1=$1}1' file
{$1=$1}
將第一個字段分配給自己,這足以使awk“觸摸”每個記錄。 我用過速記1
,這是最短的真實情況。 默認操作是{print}
。
請注意, FIELDWIDTHS
是一個GNU awk擴展,因此如果您使用的是其他版本,則必須采用不同的方法。 例如:
awk 'BEGIN{OFS=","}{print substr($0,1,5),substr($0,6,19),substr($0,25)}' file
$ sed -r 's/(.{5})(.{19})/\1,\2,/' file
01234,000000000000000000+,000000000000000000+
02586,000000000000000000+,000000000000000000-
12345,000000000000000000+,000000000000000000-
12122,000000000000000000+,000000000000000000+
這很容易:
sed -n 's/\(.\{5\}\)\(.\{19\}\)\(.\{19\}\)/\1,\2,\3/p' your_file
它做什么,是5,19,19來捕捉每一行,然后打印出來用,
在兩者之間。
$ echo 01234000000000000000000+000000000000000000+ | sed -n 's/\(.\{5\}\)\(.\{19\}\)\(.\{19\}\)/\1,\2,\3/p'
01234,000000000000000000+,000000000000000000+
Perl救援:
perl -pe 'for $p (5, 25) { substr $_, $p, 0, "," }' data.txt
這也是適合cut
任務
$ cut --output-delimiter=',' -c1-5,6-24,25- data.txt
01234,000000000000000000+,000000000000000000+
02586,000000000000000000+,000000000000000000-
12345,000000000000000000+,000000000000000000-
12122,000000000000000000+,000000000000000000+
--output-delimiter=','
指定輸出字段分隔符 -c
選擇指定的字符 1-5
第一場 6-24
秒場 25-
其余的線 awk '{sub(/.0/,",0")sub(/+/,"+,")}1' file
0123,000000000000000000+,000000000000000000+
0258,000000000000000000+,000000000000000000-
1234,000000000000000000+,000000000000000000-
1212,000000000000000000+,000000000000000000+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.