Bash awk在读线中的行为 $cat文件 11阿萨瓦121 12 saasks122 13 sasjaks22 $cat编号 读行时 做 var=$(awk'{print$1}'$行) echo$var done
Bash awk在读线中的行为 $cat文件 11阿萨瓦121 12 saasks122 13 sasjaks22 $cat编号 读行时 做 var=$(awk'{print$1}'$行) echo$var done,bash,awk,Bash,Awk,awk始终需要一个文件名作为输入 在下面的代码中,$line不是一个文件 $ cat file 11 asasaw121 12 saasks122 13 sasjaks22 $ cat no while read line do var=$(awk '{print $1}' $line) echo $var done<file $ cat yes while read line do var=$(echo $line | awk '{print $1}')
awk
始终需要一个文件名作为输入
在下面的代码中,$line
不是一个文件
$ cat file
11 asasaw121
12 saasks122
13 sasjaks22
$ cat no
while read line
do
var=$(awk '{print $1}' $line)
echo $var
done<file
$ cat yes
while read line
do
var=$(echo $line | awk '{print $1}')
echo $var
done<file
$ sh no
awk: can't open file 11
source line number 1
awk: can't open file 12
source line number 1
awk: can't open file 13
source line number 1
$ sh yes
11
12
13
您可以说(注意变量周围的双引号)
var=$(awk'{print$1}'
为什么第一个不起作用?
因为这条线:
var=$(awk '{print $1}' <<<"$line")
它假定$line
是一个文件
你可以做到:
var=$(awk '{print $1}' $line)
或
var=$(awk'{print$1}'
你要做的是像你在第二个例子中所做的那样,将这一行导入awk
。你已经得到了具体问题的答案,但我不确定你是否真的不会做上述任何一项
要打印文件中的第一个字段,您可以执行以下操作之一:
awk '{print $1}' $line
^^ awk expects to see a file path or list of file paths here
what it is getting from you is the actual file line
或者这个:
while IFS= read -r first rest
do
printf "%s\n" "$first"
done < file
awk '{print $1}' file
cut-d'-f1我需要输入#定义服务器@”http://10.35.42.54/ms0.8“
到特定行。如何使用awk
或sed
实现此目的?抱歉,实现了什么?您试图从中提取什么\define SERVER?”@"http://10.35.42.54/ms0.8
line?只需将此字符串放在某个特定文本文件的第50行。就是这样。这给了我一个错误sed:1:“50s/*/#define SERVER@”…:替换命令中的错误标志:“/”
它可以工作。但它只打印终端中的更改。文件保持不变。我如何保存文件?
awk '{print $1}' $line
^^ awk expects to see a file path or list of file paths here
what it is getting from you is the actual file line
while IFS= read -r first rest
do
printf "%s\n" "$first"
done < file
awk '{print $1}' file
cut -d ' ' -f1 <file