awkだけを使用して次のテキストをどのように変換できますか?
$ cat latest.csv
psga,alp1acscf0001vm001oam001p1n004v001,192.7.129.7,UVP
apsga,alp1acscf0001vm001oam001p1n004v002,192.7.129.8,UVP
apsga,alp1acscf0001vm002oam001p1n004v001,192.7.129.9,UVP
apsga,alp1acscf0001vm003oam001p1n004v001,192.7.129.10,UVP
apsga,alp1acscf0001vm004cif001p1n004v001,192.7.129.11,UVP
apsga,alp1acscf0001vm004cif001p1n004v002,192.7.129.12,UVP
apsga,alp1acscf0001vm005cif001p1n004v001,192.7.129.13,UVP
私は次のような結果を得ました。
$ awk -F',' '{ print substr($2, 1, 14), (substr($2, 1, 18)),$3 }' latest.csv
alp1acscf0001v alp1acscf0001vm001 192.7.129.7
alp1acscf0001v alp1acscf0001vm001 192.7.129.8
alp1acscf0001v alp1acscf0001vm002 192.7.129.9
alp1acscf0001v alp1acscf0001vm003 192.7.129.10
alp1acscf0001v alp1acscf0001vm004 192.7.129.11
alp1acscf0001v alp1acscf0001vm004 192.7.129.12
alp1acscf0001v alp1acscf0001vm005 192.7.129.13
しかし、私は最初が欲しいsubstr($2, 1, 14)
行に一度だけ残りは1行に次のようになります。
alp1acscf0001v alp1acscf0001vm001 192.7.129.7 alp1acscf0001vm001 192.7.129.8 alp1acscf0001vm002 192.7.129.9 alp1acscf0001vm003 192.7.129.10 alp1acscf0001vm004 192.7.129.11 alp1acscf0001vm004 192.7.129.12 alp1acscf0001vm005 192.7.129.13
答え1
awk -F, '
{ printf "%s %s %s", (NR==1 ? substr($2, 1, 14) : ""), substr($2, 1, 18), $3 }
END{ print "" }
' latest.csv
これは、最初の入力レコードの最初の部分文字列のみを印刷します。$3
すべてのレコードに対して別の部分文字列プラスを印刷します。END
ブロック内で改行文字を印刷します。
答え2
注文する:
awk -F "," 'BEGIN{print "alp1acscf0001v"}ORS=" "{print substr($2,1,18),$3}' filename |perl -pne "s/\n/ /g"
出力
alp1acscf0001v alp1acscf0001vm001 192.7.129.7 alp1acscf0001vm001 192.7.129.8 alp1acscf0001vm002 192.7.129.9 alp1acscf0001vm003 192.7.129.10 alp1acscf0001vm004 192.7.129.11 alp1acscf0001vm004 192.7.129.12 alp1acscf0001vm005 192.7.129.13