![如何使用 Bash 删除某一行的一部分并保留其余部分?](https://linux22.com/image/1181379/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Bash%20%E5%88%A0%E9%99%A4%E6%9F%90%E4%B8%80%E8%A1%8C%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E5%B9%B6%E4%BF%9D%E7%95%99%E5%85%B6%E4%BD%99%E9%83%A8%E5%88%86%EF%BC%9F.png)
假设我有如下几行输出:
First name, Last name, 123456789(9 digits)
GPA
Class
Major
University
我怎样才能编写一些代码来打印前 3 行并仅保留第一行的 ID 号?
我尝试使用head
、grep
和cut
,但无法做到。
答案1
您可以使用 awk 来打印最后一个以逗号分隔的字段:
$ cat file
First name, Last name, 123456789
GPA
Class
Major
University
$ awk -F', ' 'NR<4 {print $NF}' file
123456789
GPA
Class
或者使用 sed 将最长的字符串替换为逗号空格:
$ sed -n '1,3{s/.*, //; p}' file
123456789
GPA
Class
答案2
一个简单的 if-else 语句也适用于awk
。在下面,我们使用逗号空格作为字段分隔符 ( ) ,如果我们在第一行 ( ),-F', '
则打印第三个字段( ) ,否则打印前 3 行 ( ) 的整行 ( ):$3
NR == 1
$0
NR < 4
awk -F', ' '{if (NR == 1) print $3; else if (NR < 4) print $0}' file
答案3
如果您的文件有许多这样的条目而不是只有一个,请尝试:
cat file |tr "," "\n" |grep "[0-9]\{9\}" -A3