我有一个包含2列的大文本文件。第一列很大且很复杂,但包含name="..."
部分。第二列只是一个数字。
如何生成一个文本文件,使第一列只包含名称,但第二列保持不变并显示数字?基本上,我只想从第一列中提取子字符串并使第二列保持不变。
示例数据:
application{id="1821", name="app-name_01"} 0
application{id="1822", name="myapp-02", optionalFlag="false"} 1
application{id="1823", optionalFlag="false", name="app_name_public"} 3
...
所以结果文件就是这样的
app-name_01 0
myapp-02 1
app_name_public 3
...
答案 0 :(得分:3)
如果您的实际Input_file与显示的示例相同,则以下代码可能会对您有所帮助。
awk '{sub(/.*name=\"/,"");sub(/\".* /," ")} 1' Input_file
输出如下。
app-name_01 0
myapp-02 1
app_name_public 3
答案 1 :(得分:0)
使用GNU awk
$ awk 'match($0,/name="([^"]*)"/,a){print a[1],$NF}' infile
app-name_01 0
myapp-02 1
app_name_public 3
非Gawk的
awk 'match($0,/name="([^"]*)"/){t=substr($0,RSTART,RLENGTH);gsub(/name=|"/,"",t);print t,$NF}' infile
app-name_01 0
myapp-02 1
app_name_public 3
输入:
$ cat infile
application{id="1821", name="app-name_01"} 0
application{id="1822", name="myapp-02", optionalFlag="false"} 1
application{id="1823", optionalFlag="false", name="app_name_public"} 3
...
答案 2 :(得分:0)
这是一个sed
解决方案:
sed -r 's/.*name="([^"]+).* ([0-9]+)$/\1 \2/g' Input_file
说明:
随着parantheses你的商店分组中间的内容。
第一组是name="
之后的所有内容,直到第一个"
。 [^"]
表示“不是双引号”
第二组只是“在空格之前的行末尾有一个或多个数字”。