如何使用 awk 从某个字符后的行中删除文本

Jen*_*nny 17 awk text-processing

如何awk删除;文本文件每一行中出现的某个字符后的所有文本?(然后我需要在文本上运行 for 循环)

Jenny,Sarah,John;North Dakota
Henry,Frank;Illinois
Aaron,Kathryn,Caitlin,Harris;New York
Run Code Online (Sandbox Code Playgroud)

ter*_*don 23

有两种通用方法。

  1. awk的字段分隔符设置为该字符。然后你可以得到你想要的部分$1

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用于gsub()将其替换为空字符串:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy
    
    Run Code Online (Sandbox Code Playgroud)

所以,对于你的例子:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris
Run Code Online (Sandbox Code Playgroud)


Chr*_*own 7

这是一个答案sed- 由于您并没有真正进行任何现场处理,因此 awk 可能有点过头了。

sed 's/;.*//'
Run Code Online (Sandbox Code Playgroud)


Scr*_*zer 5

而且也只是cut..

cut -d\; -f1 file
Run Code Online (Sandbox Code Playgroud)