awkを使用してテキストファイルの列形式を再指定する

awkを使用してテキストファイルの列形式を再指定する

まあ、これは複雑な質問なので、明確に説明します。私が取得するファイルの内容は次のとおりです。

$ Cat File1 
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {TBMKF}
ABC Cool Lol POP {YUKER}
ABC Cool Lol POP {EFEFVD}

私が望む出力

-Cool MNB +  POP ;
-Cool MNB  + POP ;
-Cool MNB  + POP ;
-Cool TBMKF + POP ;
-Cool YUKER + POP ;
-Cool EFEFVD +POP ;

まず、最後の列を持ってFile1印刷してみました。sed 's/[{}//g' File1 > File3

その後、内容全体をFile1新しいフォルダにコピーしました。File4

cp File1 File4

次に、内部のデータをデータに置き換えますFile4File3角かっこなしのデータは「File1最後の列のデータ」を意味します)。

awk 'FNR==NR{a[NR]=$1;next}{$5=a[FNR]}1' File3 File4 >>File5 

出力は次のようにする必要があります

ABC Cool Lol POP MNB
ABC Cool Lol POP MNB
ABC Cool Lol POP MNB
ABC Cool Lol POP TBMKF
ABC Cool Lol POP YUKER
ABC Cool Lol POP EFEFVD

最後に、私は努力する

awk -F“ " '{print - $2,$5 +,$4 ";"}‘ File5

ところで、好きなように結果が出ませんでしたね。同様のデータであるMNBのみがリストされ、残りは表示されませんでした(最後のデータ列はアーカイブされていました)。

ベストアンサー1

なぜ物を左右にコピーしたいのかわかりません。簡単なこと

awk '{print "-" $2, substr($5,2,length($5)-2), "+", $4, ";"}' File1

最初に入れた-;最後に入れました。

その間に私達は印刷します

  • $2私たちはそれをそのままにしたいからです。
  • $5最初の文字と最後の文字がない文字列のサブ文字列です。位置2で始まる最初の文字をスキップし(awkは常にこれについて奇妙でした)、元の文字列より2文字短い部分文字列のみを選択して最後の文字を省略します。$5
  • +私たちがそれをしたいから
  • それから$4

しかし、これらの文字列関数がすべてGNU awkに固有のものかどうかはわかりません。

おすすめ記事