awk防止空格

时间:2017-03-31 08:39:00

标签: bash awk

我有以下代码:

#!/bin/bash

FILE=source.txt
RES=res.txt

VAR1=match

rm -f $RES
sudo cat $FILE | while IFS= read LINE; do
    if [[ ! $(echo "$LINE" | grep $VAR1 ) ]]; then
        echo -e "$LINE" >> $RES
    else
                NEW_LINE=$(awk '{gsub("'"${VAR1}"'", ""); print}' <<< $LINE)
                echo -e "$NEW_LINE" | xargs >> $RES
    fi
done

的Source.txt:

rob     math
        science match something
  something match
hary    math linux

执行代码后,我希望收到以下内容:

rob     math
        science something
  something
hary    math linux

但它删除了两个受影响的行中的空格。所以我最终得到以下结果:

rob     math
science something
something
hary    math linux
你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

除非您没有分享整个要求,否则您的所有代码都可以归结为function findTopicByID(id) { let findedTopic = {}; let topics = obj.project.topics; topics.map((topic) => { if(parseInt(topic.id) === id) findedTopic = topic; }); return findedTopic; } 中的这一行,

Awk

我可以将匹配从awk '{gsub("match","",$0)}1' source.txt rob math science something something hary 变量配置为

bash

myVAR="match" awk -v pat="${myVAR}" '{gsub(pat,"",$0)}1' source.txt 标记允许您 -v变量导入bash的上下文。要完成写入新文件的答案,我会这样做

Awk

要回答你原来尝试吃掉白色空间的要求,需要注意几点,这句话

awk -v pat="${myVAR}" '{gsub(pat,"",$0)}1' source.txt > res.txt
如果你想保留你读过的每一行中的空格,

是错误的,它应该被双引号为

awk '{gsub("'"${VAR1}"'", ""); print}' <<< $LINE

即使进行了这项更改,在写入文件之前您还有awk '{gsub("'"${VAR1}"'", ""); print}' <<<"$LINE" (不确定原因)但您必须知道它从输入流中吞下空格。删除它应该可以解决您的问题。

假设您想要为这样一个简单的用例执行这样一个简单的脚本,语法上的正确方法(使用您的逻辑)将是,

xargs