我有以下几行:
field1 1-23_4_5 field3
field1 2-40_5_7 field3
field1 3-43_7_9 field3
.
.
.
我想修改第二个字段,以便
1-23_4_5
变为1-23
我认为awk
和cut
的组合可以解决问题。有一个简单的方法可以解决这个问题吗?
非常感谢您的帮助。
答案 0 :(得分:2)
通过awk,
$ awk 'sub(/_[^_]*_[^_]*$/,"",$2)1' file
field1 1-23 field3
field1 2-40 field3
field1 3-43 field3
通过sed,
$ sed 's/^\([^ ]\+\ *[^_]\+\)[^ ]\+/\1/g' file
field1 1-23 field3
field1 2-40 field3
field1 3-43 field3
答案 1 :(得分:0)
这是一个awk
版本:
awk '{split($2,a,"_");$2=a[1]}1' file
field1 1-23 field3
field1 2-40 field3
field1 3-43 field3
将字段2
除以_
,并仅使用第一部分
PS它改变了格式。 (与awk一样正常)
答案 2 :(得分:0)
您可以使用read
和substring extraction
使用简单的bash脚本轻松完成此操作:
#!/bin/bash
## validate input file
[ -r "$1" ] || { printf "Error: insufficient input. Usage %s <filename>\n"; exit 1; }
## read and extract substring of field2
while read -r f1 f2 f3 || [ -n "$f3" ]; do
printf "%s %s %s\n" "$f1" "${f2%%_*}" "$f3";
done < "$1"
测试文件:
$ cat dat/field.txt
field1 1-23_4_5 field3
field1 2-40_5_7 field3
field1 3-43_7_9 field3
<强>输出:强>
$ bash fields.sh dat/field.txt
field1 1-23 field3
field1 2-40 field3
field1 3-43 field3