簡體   English   中英

連接grep輸出字符串(bash腳本)

[英]Concatenate grep output string (bash script)

我正在使用bash腳本(Ubuntu 12.10)處理文本文件中的某些數據。

基本思想是我使用grep從文件中選擇了某一行。 接下來,我處理該行以獲取sed的數字。 grep和sed命令都可以使用。 我可以回音。

但是將結果與字符串連接是錯誤的。

當我從變量或文件執行grep命令時,組合字符串時會得到不同的結果。 當我grep文件時,串聯出錯。 當我用與文件中相同的文本grep一個變量時,它可以按預期工作。

文件中的grep我在做什么?

test.pdb的內容

REMARK overall = 324.88  
REMARK bon     = 24.1918  
REMARK coup    = 0  

我的劇本

#!/bin/bash

#Correct function
echo "Working code"
TEXT="REMARK overall = 324.88\nREMARK bon     = 24.1918\nREMARK coup    = 0\n"
DATA=$(echo -e $TEXT | grep 'overall' | sed -n -e "s/^.*= //p" )

echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA


#Not working
echo ""
echo "Not working code"
DATA=$(grep 'overall' test.pdb | sed -n -e "s/^.*= //p")

echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA

產量

Working code
Data: 324.88
324.88;0

Not working code
Data: 324.88
;04.88

我因同樣的問題而發瘋。

真正的問題是您的“ test.pdb”可能具有錯誤的EOL(行尾)字符。

Linux EOL:LF(又名\\ n)

Windows EOL:CR LF(又名\\ r \\ n)

這意味着echo和grep將對這個額外的字符(\\ r)產生問題,幸運的是tr,sed和awk正確地對其進行了管理。

因此,您也可以嘗試:

DATA = $(grep'overall'test.pdb | sed -n -e“ s /^.*= // p” | sed -e 2s / \\ r $ //“)

要么

DATA = $(grep'overall'test.pdb | sed -n -e“ s /^.*= // p” | tr -d'\\ r')

嘗試這個:

SUFFIX=";0"
DATA="${DATA}${SUFFIX}"

使用 ,我想它會更可靠,更干凈:

$ awk '$2=="overall"{print "Working code\nData: " $4 "\n" $4 ";0"}' file.txt
Working code
Data: 324.88
324.88;0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM