我想打印奇数行(1,3,5,7 ..)而没有任何改变,但偶数行(2,4,6,8)处理以grep开头的管道.我想把所有内容写入新文件(奇数行没有任何变化,偶数行的新值).
我知道如何在awk中打印每一行:
awk ' NR % 2 == 1 { print; } NR % 2 ==0 {print; }' file.fasta
Run Code Online (Sandbox Code Playgroud)
但是,对于偶数行,我不想使用{print; }但我想使用我的grep管道.
建议将不胜感激.非常感谢.
Sha*_*hin 11
如果您打算做一个简单的操作grep,您可以取消附加步骤并在awk中进行过滤,例如:
awk 'NR % 2 {print} !(NR % 2) && /pattern/ {print}' file.fasta
Run Code Online (Sandbox Code Playgroud)
但是,如果你打算做更多的事情,因为chepner已经指出了,你确实可以从awk内部管道.例如:
awk 'NR % 2 {print} !(NR % 2) {print | "grep pattern | rev" }' file.fasta
Run Code Online (Sandbox Code Playgroud)
这将打开命令管道"pattern | rev"(注意周围的引号)并将打印输出重定向到它.请注意,这种情况下的输出可能与您的预期不符; 你将最终输出所有奇数行,然后输出管道命令(消耗偶数行).
(根据您的评论)计算每个偶数行中的字符数,请尝试:
awk 'NR % 2 {print} !(NR % 2) {print length($0)}' file.fasta
Run Code Online (Sandbox Code Playgroud)
你可以直接从里面管道awk:
awk ' NR % 2 == 1 { print; } NR % 2 ==0 {print | "grep -o [actgnACTGN] | wc -l"; }' file.fasta
Run Code Online (Sandbox Code Playgroud)
但请注意,这不会保留输入文件的顺序.
(选择的答案对于手头的任务更好,但我会在这里留下这个答案,作为将print语句传递给外部命令的示例.)