2016-12-17 2 views
0

Ich bin eigentlich neu in Shell-Skripten. Ich habe eine file.txt geschrieben 662,2016-12-31.passing word in einem Befehl

Beispiel: # cat file.txt

662,2016-12-31

Ich habe eine andere script.sh Datei mit dem Befehl ‚{$ 1 $ 2" 0 "drucken", field1, field2 }‘

Beispiel: # cat script.sh

'{$ 1 $ 2" 0 "drucken", field1, field2}'

I 662 bei field1 drucken möchten, und 2016.12.31 in Feld2. Kann es gemacht werden?

+0

Ich denke, du solltest deine Frage neu formulieren, damit es klarer wird - das ist das Geheimnis, um eine gute Antwort auf Stack Overflow zu bekommen. Im Moment habe ich keine Ahnung, was genau du zu tun versuchst. – kamituel

+0

Um ehrlich zu sein, nein. Sieh dir das an: 'cat file.txt | perl -ne 'Drucken' field1: $ 1 field2: $ 2 \ n "if /(.*),(.*)/ ''. Sie können nun einen Teil nach 'print' ändern, um Ihre Felder neu anzuordnen, oder einige Zeichen dazwischen hinzufügen. Wenn Sie das brauchen. – kamituel

+0

"Katze install_offer1.csv | sed 's /" 880 // g' | sed 's/"88 // g' | sed 's /" // g' | sed 's /, 019 /, 19/g '| nawk -F, '{print $ 1', 0 '$ 2', field1, field2 "} '> install_offer2.csv" eigentlich ist das der volle Befehl. Ich möchte nur 662 an der Stelle von field1 und 2016-12-31 drucken an der Stelle von field2.so, wenn ich die Datei.txt ändere, ändert sich der Befehl auch, da er immer das Argument von der file.txt nimmt. –

Antwort

0

Dies kann einfach mit dem Befehl awk erreicht werden. Sie können folgende einfache Shell-Skript überprüfen,

#!/bin/sh 

InputData=`cat file.txt` 

field1=`echo $InputData | awk -F "," '{print $1}'` 
field2=`echo $InputData | awk -F "," '{print $2}'` 

echo "field1=$field1" 
echo "field2=$field2" 

Ausgang:

field1=662 
field2=2016-12-31 
0

Sie können mithilfe cut Befehl mit Trennzeichen als Wert von field1 und field2 bekommen ""

field1=`cat file.txt | cut -d "," -f1` 
field2=`cat file.txt | cut -d "," -f2` 

'{print $2",0"$1",$field1,$field2}'