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