在单个命令中组合 2 个不同的剪切输出?

在单个命令中组合 2 个不同的剪切输出?

我有一个如下所示的文件:

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

使用cutandpaste你还可以做一行:

$ 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]'

在字母边界处自动分割,向左旋转一个并打印。

相关内容