使用awk缩短标题

时间:2014-05-03 20:42:50

标签: bash awk

我有像

这样的标题
>XX|6226515|new|xx_000000.1| XXXXXXX

在我试图缩短为

的文本文件中
>XX6226515

使用awk。我试过了

awk -F"|" '/>/{$0=">"$1}1' input.txt > output.txt

但它会产生以下内容

>XX|6226515|new|

4 个答案:

答案 0 :(得分:4)

awk -F"|" '{print $1$2}' input.txt > output.txt

输出:

>XX6226515

答案 1 :(得分:3)

sed解决方案:

sed -e 's/|//' -e 's/|.*//'

第一个替换删除第一个垂直条,第二个替换删除第二个垂直条以及之后的任何内容。

答案 2 :(得分:1)

$ awk -F'|' '$0=$1$2' <<< ">XX|6226515|new|xx_000000.1| XXXXXXX"
>XX6226515

答案 3 :(得分:1)

这个cut也可以成功:

cut -d"|" --output-delimiter="" -f-2

见输出:

$ echo ">XX|6226515|new|xx_000000.1| XXXXXXX" | cut -d"|" --output-delimiter="" -f-2
>XX6226515
  • -d"|"|设置为字段分隔符。
  • --output-delimiter=""表示输出分隔符必须为空。
  • -f-2表示必须打印所有记录,直至第二个(含)。

仅使用bash

while IFS="|" read a b _
do
  echo "$a$b"
done <<< ">XX|6226515|new|xx_000000.1| XXXXXXX"

见输出:

$ while IFS="|" read a b _; do echo "$a$b"; done <<< ">XX|6226515|new|xx_000000.1| XXXXXXX"
>XX6226515