次のファイルがあります。
1234
ABCD
EFGH
次のように変換したいと思います。
2341
BCDA
FGHE
実際のファイルには4,000語があるので、これを効率的に実行したいと思います。コマンドを試しましたが、cut -c 2-4,1 file.txt
入力とまったく同じ出力が生成されます。私の考えでは、3つの異なるコマンドを使用できるようです。
cut -c 1 file.txt > temp1.txt
cut -c 2-4 file.txt > temp2.txt
// combine the two with paste or pr
...しかし、いくつかの修正を経て何度も実行する必要があるので、単一のコマンドを好みます。したがって、1つのコマンドを実行することは、毎回3つのコマンドを実行するよりもエラーの可能性が低くなります。
2つのcutステートメントを1つにまとめる方法はありますか?それは次のとおりです。
cut -c 1 file.txt | pr (cut -c 2-4 file.txt)
それとももっと良い方法がありますか?
答え1
以下を使用して、cut
次のpaste
行を実行することもできます。
$ cat file
1234
ABCD
EFGH
$ paste --delimiter='' <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE
答え2
使用sed
:
sed 's:^\(.\)\(.*\):\2\1:' file.txt
2341
BCDA
FGHE
答え3
Bashを使用している場合は、文字列インデックスを使用してください。パラメータ拡張:
while IFS= read -r word; do
echo "${word:1:3}${word:0:1}"
done < file.txt
答え4
1つの方法は次のとおりですperl
。
perl -F'' -lane 'print @F[1..@F], $F[0]'
文字境界で自動的に分割し、1つを左に回転して印刷します。