BASH - 随机播放文件中字符串中的字符

标签 bash awk sed shuffle lines

我有一个具有以下结构的文件 (filename.txt):

>line1
ABC
>line2
DEF
>line3
GHI
>line4
JKL

我想打乱字符串中>开头的字符。输出将(例如)如下所示:

>line1
BCA
>line2
DFE
>line3
IHG
>line4
KLJ

这就是我尝试打乱字符串中字符的方式:sed 's/./&\n/' |混音 | tr -d "\n" 。看起来它有效,但它没有考虑换行符。此外,它对所有数据执行命令,而不仅仅是不以 > 开头的行。

最佳答案

使用 perlruby

$ # split// to get individual characters
$ # join "" to join characters with empty string
$ # if !/^>/ to apply the change only for lines not starting with >
$ # alternate: perl -MList::Util=shuffle -lne 'print /^>/ ? $_ : shuffle split//'
$ perl -MList::Util=shuffle -lpe '$_=join "", shuffle split// if !/^>/' ip.txt 
>line1
CBA
>line2
FED
>line3
IHG
>line4
JKL

$ # $_.chars to get individual characters
$ # * "" to join array elements with empty string
$ ruby -lpe '$_ = $_.chars.shuffle * "" if !/^>/' ip.txt 
>line1
BAC
>line2
EDF
>line3
GHI
>line4
JKL

关于BASH - 随机播放文件中字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49555930/

相关文章:

linux - 如何使用 awk 查找行中的连续模式?

linux - 逐行读取模式之间的内容,然后以限定格式打印

linux - 如何连接两个 linux 命令的结果?

regex - sed 在一行中多次替换

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

bash - Linode Lish bash : warning: setlocale: LC_ALL: cannot change locale (en_US. UTF-8)

linux - Bash 脚本,将输出重定向到另一个目录

bash - 内联评估 bash/zsh 表达式

awk - 偷看下一行,但不要消费它

awk - 我用什么来操作文本文件并从中提取数据并将输出存储为表格格式?