【问题标题】:Loops inside loops?循环内循环?
【发布时间】:2012-12-22 19:31:06
【问题描述】:

尝试跨两个文件读取四个不同的列并进行适当的分配。有人可以帮忙吗?

languagefile.txt 内容如下: 语言isocode

english.txt 内容如下: 字段值

我希望它遍历两个文件并将 isocode & 文件名 & 字段 & 值关联起来。

我有一个执行 english.txt 文件的 while 循环:

cat english.txt| while read FIELD VALUE; do
GET https://googleapis.com/language/translate/v2?key=$mykey&q=$VALUE&source=en&target=es
echo "$FIELD "$VALUE"; done

但是我也需要扩展它以考虑语言文件。所以它会这样做:

cat english.txt| while read FIELD VALUE; do
GET https://googleapis.com/language/translate/v2?key=$mykey&q=$VALUE&source=en&target=$isocode
echo "$ISO $FIELD "$VALUE" >> $Language.txt; done

我希望这是有道理的。我最终只需要让它为每种语言和 iso 代码执行此操作。不确定最好的方法

【问题讨论】:

  • 是 GET 一个命令吗?还有:读 a b c:这意味着取 a 中的第一个字段,b 中的第二个字段,以及 c 中的其余行。 (由 IFS 分隔的字段,默认为空格、制表符和换行符)。不确定这是你想要做的......

标签: bash for-loop while-loop


【解决方案1】:

如果我理解正确,最简单的解决方案可能是使用paste

while read -r iso field value; do
    # do something with $iso $field and $value
done < <(paste languagefile.txt english.txt)

请注意,如果任何输入数据字段可以包含空格,事情会变得更加棘手。

【讨论】:

    【解决方案2】:

    对不起,让我换个说法,是的,GET 是一个命令。

    文件 1 包含: 语言iso

    文件 2 包含: 字段值

    我最终希望得到的最终结果是: 语言.txt: iso 字段值

    language.txt 来自 file1,字段一。

    所以它需要是这样的: 每次读取 $language 时,使用 $field $value $iso(对应于 $language 中的行)执行 GET 请求,然后以 $iso $field $value 格式将结果输入 $language.txt

    【讨论】:

    • 您应该编辑原始问题,而不是添加解释作为“答案”。当人们开始对答案进行投票时,您的额外解释将排在较低的位置,因此其他人可能看不到它。
    猜你喜欢
    • 2014-06-18
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2016-05-13
    相关资源
    最近更新 更多