如何使用 Bash 删除某一行的一部分并保留其余部分?

如何使用 Bash 删除某一行的一部分并保留其余部分?

假设我有如下几行输出:

First name, Last name, 123456789(9 digits)
GPA
Class
Major
University

我怎样才能编写一些代码来打印前 3 行并仅保留第一行的 ID 号?

我尝试使用headgrepcut,但无法做到。

答案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 行 ( ) 的整行 ( ):$3NR == 1$0NR < 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

相关内容