コンテンツを含むファイルがあります。
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
このファイルを次のように変換したいと思います。
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
ここで、最初の列項目は位置25で変更する必要があります。元のファイルの2番目の列が25文字を超える場合は、残りの文字はスキップする必要があります。これは、25日以降のすべての文字を削除する必要があることを意味します。
たとえば、上記のサンプル出力ファイルでは、最初の列は1
位置26にあります。
awk、sed、または同様のコマンドラインツールを使用してこれを実行できますか?
答え1
何について:
awk '{printf "%-25s %s\n",$2,$1}' file
望むより:
cat file
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
789 abcdefghijklmnopqrstuvwxyz
999 abcdefghijklmnopqrstuvwxyzABC
出力:
awk '{printf "%-25s %s\n",$2,$1}' file
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
abcdefghijklmnopqrstuvwxyz 789
abcdefghijklmnopqrstuvwxyzABC 999
答え2
2番目のフィールドの25文字目以降を切り捨てるには、awkでsubstr関数を使用できます。
文書
cat file
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
456 abcdefghijklmnopqrstuvwxyz
出力
awk '{printf("%-26s %s\n", substr($2,0,25),$1)}' file
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
abcdefghijklmnopqrstuvwxy 456