如何使用awk将具有多个空格的字符串分配给变量



我遇到了将awk输出保存到变量并保留输入的问题。我有一个以制表符分隔的文件ABC.txt,格式如下:字段1 = a,字段2 = A B <-字母A和B之间的2个空格,字段3 = c

set text = `awk -F "t" '{print $2}' ABC.txt`
echo $text
A B <- 1 space between the letters A and B,
echo "$text"
A B <- 1 space between the letters A and B,

我需要一个解决方案,其中变量保留多个空格(我看到的实例中,可以有两个或三个连续的空格):

echo $text = A B <-字母A和B之间2个空格,

回声"text&quot美元;= A B <-字母A和B之间间隔2个空格,

在CSH中,为了保留空格,需要对变量展开符进行双引号backticks-expression;一个简单的例子是:

set text = "`echo 'A  B'`"
echo "$text"
A  B

但是与POSIX兼容的shell不同,CSH不会为命令替换(也称为。backticks-expressions);一旦对它加双引号,转义规则就变成了周围双引号的转义规则:

  1. 没有反斜杠转义。
  2. 不能使用".
  3. $启动变量扩展
  4. `启动命令替换。
  5. 等等…?

将这些字符包含为字面值的方法双引号内实际上是从外附加它们:关闭周围的双引号,附加字符(使用反斜杠转义或在单引号内),然后重新打开双引号;shell将为您处理连接。

例子:

echo "..."""..."
echo "..."$"..."
echo "..."`"..."
echo "..."'"'"..."
echo "..."'$'"..."
echo "..."'`'"..."

这两个输出:

..."...
...$...
...`...

awk -F "t" '{print $2}' ABC.txt的命令替换双引号时,您需要做的是:

set text = "`awk -F """t""" '{print "$"2}' ABC.txt`"
echo "$text"
A  B

顺便说一句,使用awk -F "t"没有意义,使用awk -F 't'更容易:

set text = "`awk -F 't' '{print "$"2}' ABC.txt

相关内容

  • 没有找到相关文章

最新更新