Unix 使用awk或sed将带有标题的列添加到管道分隔文件
我试图添加一个标题为“DATE”的列,其值等于日期“DD-MM-YY”。我遇到的问题是,我运行的代码将“DATE”和“DD-MM-YY”值添加到新行的第二列,而不是添加到数据中的现有行 我尝试过使用awk和sed,但都产生了相同的结果 提前感谢您的帮助Unix 使用awk或sed将带有标题的列添加到管道分隔文件,unix,awk,sed,data-cleaning,Unix,Awk,Sed,Data Cleaning,我试图添加一个标题为“DATE”的列,其值等于日期“DD-MM-YY”。我遇到的问题是,我运行的代码将“DATE”和“DD-MM-YY”值添加到新行的第二列,而不是添加到数据中的现有行 我尝试过使用awk和sed,但都产生了相同的结果 提前感谢您的帮助 for y in 2021 do for m in 02 do for d in 01 do awk -v d=$y-$m-$d -F"|" 'BEGIN {OFS =
for y in 2021
do
for m in 02
do
for d in 01
do
awk -v d=$y-$m-$d -F"|" 'BEGIN {OFS = "|"} FNR==1{$(NF+1)="DATE"} FNR>1{$(NF+1)=d;} 1' Corporate_bond_mstr-$y-$m-$d.txt > check.txt
done
done
done
及
原始数据
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD|DATE
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT|DD-MM-YY
运行代码后的数据
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD
|DATE
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP
|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND
|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT
|DD-MM-YY
所需数据
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT
FINRA_SCRTY_ID|CUSIP_ID|SYM_CD|CMPNY_NM|SUB_PRDCT_TYPE_CD|DATE
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|CORP|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|BOND|DD-MM-YY
3698282|000336AC1|ANTM3698282|AAG HLDG INC|CORP|GOVT|DD-MM-YY
使用GNU,这将产生所需的数据:
y=YY m=MM d=DD
sed -e '1s/[ ]*$/|DATE/' \
-e '2,$s/[ ]*$/|'"$d-$m-$y"'/' data
也许
列
命令在欺骗您;请尝试在不使用的情况下运行。我需要清除文本文件中的回车符,代码才能正确运行
sed-e's/[\r\n]//g'Corporate_bond_mstr-$y-$m-$d.txt>chg1.txtsed-e'0,/| CNVRB_FL/s/| CNVRB_FL |/'chg1.txt>chg.txt
sed-e'1s/$/DATE/'-e“2,$s/$/|$y-$m-$d/”-e's/>|/|/g'chg.txt>Corporate_bond_mstr-$y-$m-$d.txt谢谢你的评论,但即使没有column命令,我也会得到同样的结果。我是一个相当新手,我一直在用头撞墙试图弄清楚这一点,但一直很麻烦。