このようなファイルがあります。
IMS00|20140101|Unix|Jan14
IMS01|20140201|Unix|Feb14
IMS02|20140301|Unix|Mar14
IMS03|20140101|Unix|Jan14
IMS04|20140201|Unix|Feb14
私の基準は、列1の値がある場合はIMS00
列4の値をJan14
に置き換え、Jan15
列1の値がある場合はIMS01
列4の値をFeb14
に置き換える必要があることですFeb15
。
これはどのように達成できますか?
答え1
あなたの質問は非常に明確ではありません。たとえば、あなたが書いたコードでは、ドットとして後でIMS00
呼び出されます。また、代わりにIMS.00
列数を変更することも可能でなければなりません。とにかく、あなたは探しているでしょう4
3
awk 'BEGIN{FS=OFS="|"}$1=="IMS00"{$4="Jan15"}$1=="IMS01"{$4="Feb15"}1' file
このBEGIN
ブロックは最初に一度だけ実行され、フィールド区切り記号FS
と出力フィールド区切り記号OFS
をに設定します|
。結局、すべてを印刷します1
。
答え2
Perlでは、次のようにすることができます。
perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file
答え3
以下はPythonソリューションです。
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('IMS00'):
print line.replace('Jan14', 'Jan15')
elif line.startswith('IMS01'):
print line.replace('Feb14', 'Feb15')
スクリプトはファイルの各行を読み取り、行が指定された文字列で始まるかどうかを確認します。その場合、行の必要な部分は置換文字列で置き換えられます。