如何反转csv中第10列数据的具体条件。输入文件:
RFIN0010|TD|379410|3261664|44753406|CAD|MC|SALE|S|4|8275.08|USD|0.76644909
RFIN0010|TD|379410|3261666|44753408|CAD||IA|S||-335.81|USD|
RFIN0010|TD|379410|3261666|44753408|CAD||PFEE|S||-15.31|USD|
HFIN0010T|362051|11/01/2017|11/01/2017|11/02/2017|08:55:43
RFIN0011|PFEE|DEP|TD|379410|3261666|44753408|USD|27366020|MC||"Fee"|S|4|0.0000|6342.43|0.000500|-3.18|CAD
HACT0010|362051|11/01/2017|11/01/2017|11/02/2017|08:48:41
RACT0010|11/01/2017|871889|"online3"|"1238"|12152|TD|349239|USD|"abc87905"||xxx01|06/20|12.00|VI|DP|10/31/2017|88450G|100||||7311||||||V383|N|.1|.0225|-.37|-.02||USD|""|我想要RACT0010第10列数据反转
输出:
RFIN0010|TD|379410|3261664|44753406|CAD|MC|SALE|S|4|8275.08|USD|0.76644909
RFIN0010|TD|379410|3261666|44753408|CAD||IA|S||-335.81|USD|
RFIN0010|TD|379410|3261666|44753408|CAD||PFEE|S||-15.31|USD|
HFIN0010T|362051|11/01/2017|11/01/2017|11/02/2017|08:55:43
RFIN0011|PFEE|DEP|TD|379410|3261666|44753408|USD|27366020|MC||"Fee"|S|4|0.0000|6342.43|0.000500|-3.18|CAD
HACT0010|362051|11/01/2017|11/01/2017|11/02/2017|08:48:41
RACT0010|11/01/2017|871889|"online3"|"1238"|12152|TD|349239|USD|"50978cba"||xxx01|06/20|12.00|VI|DP|10/31/2017|88450G|100||||7311||||||V383|N|.1|.0225|-.37|-.02||USD|""|我的shell:
#!/bin/bash
for j in *.dfr;
do
FILE=$j;
echo $j++ |awk '{if ($1=="RACT0010"){$10=reverse$10} else {$1=$1} print}' FS='|' OFS='|' $j> rev/$j
done;发布于 2018-07-25 17:14:40
您的问题的awk部分可以像这样解决(为了清楚起见,添加了换行和注释):
awk '$1 == "RACT0010" { # use a condition, not an "if"
n = split($10, a, //) # split into array of characters
s = "" # initialise s to empty
for (i = n; i > 0; i--) s = s a[i] # build new reversed string
$10 = s # overwrite original field
}
1' FS='|' OFS='|' file # 1 is shortest true condition把这个放到你的循环中:
for j in *.dfr; do
awk '$1 == "RACT0010" {
n = split($10, a, //); s = ""; for (i = n; i > 0; i--) s = s a[i]; $10 = s
} 1' FS='|' OFS='|' "$j" > rev/"$j"
done正如注释中所指出的,规范并不保证使用带有//的split将字符串拆分成单独的字符。在GNU awk中它可以工作,但在其他地方可能不行。反转字符串的另一种方法是重复调用substr
s = ""
len = length($10)
for (i = 0; i < len; ++i) s = s substr($10, len - i, 1)发布于 2018-07-25 17:20:15
#!/bin/bash
mkdir -p rev
for j in *.dfr
do
awk '{if ($1=="RACT0010"){x=""; for(i=length($10); i!=0; i--) {x=x substr($10, i, 1)}; $10=x}; print}' FS='|' OFS='|' $j > rev/$j
donehttps://stackoverflow.com/questions/51514782
复制相似问题