我有一个如下所示的文件:
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
...但我更喜欢单个命令,因为我需要多次运行它并稍加修改,因此运行一个命令比每次运行 3 个命令更不容易出错。
有什么办法可以将 2 个 cut 语句合并为一个吗?就像是:
cut -c 1 file.txt | pr (cut -c 2-4 file.txt)
或者有更好的方法来做到这一点吗?
答案1
使用cut
andpaste
你还可以做一行:
$ 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
这是一种方法perl
:
perl -F'' -lane 'print @F[1..@F], $F[0]'
在字母边界处自动分割,向左旋转一个并打印。